package com.haidechizi.i18n.common.utils;

import com.haidechizi.i18n.common.annotation.I18nField;
import org.apache.commons.lang3.StringUtils;

import java.lang.reflect.Field;

/**
 * field 工具类，判断当前field使用的是那种国际化方式
 */
public class I18nFieldUtils {

    /**
     * 没有自己的businessCode，也没有定制metaCalculator，属于简单属性
     */
    public static Boolean isSimpleField(Field field) {
        I18nField i18nField = field.getAnnotation(I18nField.class);
        return isSimpleField(i18nField);
    }

    public static Boolean isSimpleField(I18nField i18nField) {
        String businessCodeEl = i18nField.businessCode();
        String metaCalculator = i18nField.metaCalculator();
        if (StringUtils.isEmpty(metaCalculator) && StringUtils.isEmpty(businessCodeEl)) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * 组合国际化方式
     * eg:
     * class Student{
     * String id;
     * String name;
     * String clazzId;
     * String clazzName;
     * <p>
     * }
     * <p>
     * 则clazzName采用的就是组合国际化的方式
     *
     * @param field
     * @return
     */
    public static Boolean isCombinedField(Field field) {
        I18nField i18nField = field.getAnnotation(I18nField.class);
        return isCombinedField(i18nField);
    }

    public static Boolean isCombinedField(I18nField i18nField) {
        if (StringUtils.isNotEmpty(i18nField.businessCode())
                && StringUtils.isNotEmpty(i18nField.businessKey())
                && StringUtils.isEmpty(i18nField.metaCalculator())) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * metaCalculator不为空，属于自定义国际化方式
     *
     * @param field
     * @return
     */
    public static Boolean isCustomField(Field field) {
        I18nField i18nField = field.getAnnotation(I18nField.class);
        return isCustomField(i18nField);
    }

    public static Boolean isCustomField(I18nField i18nField) {
        if (StringUtils.isNotEmpty(i18nField.metaCalculator())) {
            return true;
        } else {
            return false;
        }
    }

    public static Boolean otherField(Field field) {
        return !isSimpleField(field) && !isCombinedField(field) && !isCustomField(field);
    }

}
